package com.manli.wechat.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.manli.common.utils.HttpUtil;
import com.manli.wechat.pojo.WeChatUserInfo;
import com.manli.wechat.pojo.WeChatUserInfoGet;
import com.manli.wechat.pojo.WeChatUserInfoGetList;

import java.util.ArrayList;
import java.util.List;

/**
 * 微信用户管理
 */
public class WeChatUserManage extends WeChat {

    public WeChatUserManage(String appid, String appsecret) {
        super(appid, appsecret);
    }

//    public static void main(String[] args) {
//        WeChatUserManage weChatUserManage = new WeChatUserManage("wx3745551a988274db","099aed3c00a2c1102bdcdad1b7e60435");
//        weChatUserManage.queryUserTag("");
//
//
//    }

    /**
     * 微信用户管理
     * 创建用户标签
     * @return
     */
    public JSONObject createUserTag(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.USER_TAG_CREATE_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 获取已创建用户标签
     * @return
     */
    public JSONObject queryUserTag(String acceccToken) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsGet(WeChatUrl.USER_TAG_QUERY_URL + acceccToken));
    }

    /**
     * 微信用户管理
     * 编辑用户标签
     * @return
     */
    public JSONObject updateUserTag(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.USER_TAG_UPDATE_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 删除用户标签
     * @return
     */
    public JSONObject deleteUserTag(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.USER_TAG_DEL_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 获取标签下粉丝列表
     * @return
     */
    public JSONObject queryTagFans(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.USER_TAG_FANS_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 批量为用户打标签
     * @return
     */
    public JSONObject batchTagsForFans(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.USER_TAG_BATCHING_URL + acceccToken,json,HttpUtil.JSON));
    }


    /**
     * 微信用户管理
     * 批量为用户取消标签
     * @return
     */
    public JSONObject delBatchTagsForFans(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.USER_TAG_BATCHING_DEL_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 获取用户身上的标签列表
     * @return
     */
    public JSONObject getTagsFromFans(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.USER_TAG_GET_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 对指定用户设置备注名
     * @return
     */
    public JSONObject remarkNameForFans(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.REMARK_NAME_FOR_FANS_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 获取用户基本信息(UnionID机制)，只有在用户将公众号绑定到微信开放平台帐号后，才会出现该UnionID。
     * @return
     */
    public JSONObject getUserUnionId(String acceccToken, String openId) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsGet(WeChatUrl.USERINFO_UNIONID_URL + acceccToken + "&openid=" + openId + "&lang=zh_CN"));
    }

    public WeChatUserInfo getUserUnionIdFromJSONObject(JSONObject object) {
        if (object.containsKey("errcode")){
            return  null;
        }
        return JSONObject.parseObject(object.toJSONString(), WeChatUserInfo.class);
    }

    public static void main(String[] args) {
        WeChatUserInfoGetList weChatUserInfoGetList = new WeChatUserInfoGetList();
        List<WeChatUserInfoGet> list = new ArrayList<>();
        WeChatUserInfoGet weChatUserInfoGet = new WeChatUserInfoGet();
        weChatUserInfoGet.setOpenid("111");
        weChatUserInfoGet.setLang("2222");
        list.add(weChatUserInfoGet);
        weChatUserInfoGetList.setUser_list(list);
        JSONObject json = (JSONObject) JSON.toJSON(weChatUserInfoGetList);
        System.out.println(json);
    }

    /**
     * 微信用户管理
     * 批量获取用户基本信息
     * @return
     */
    public JSONObject batchGetUserUnionId(String acceccToken, WeChatUserInfoGetList weChatUserInfoGetList) throws Exception{
        isInited();
        JSONObject json = (JSONObject) JSON.toJSON(weChatUserInfoGetList);
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.BATCH_USERINFO_UNIONID_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 获取帐号的关注者列表，nextOpenid可为""
     * @return
     */
    public JSONObject getUserList(String acceccToken, String nextOpenid) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsGet(WeChatUrl.USER_LIST_URL + acceccToken + "&next_openid=" + nextOpenid));
    }


    /**
     * 微信用户管理
     * 获取公众号的黑名单列表
     * @return
     */
    public JSONObject getBlackUserList(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.BLACK_USER_LIST_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 拉黑用户
     * @return
     */
    public JSONObject blackingUser(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.BLACKING_USER_URL + acceccToken,json,HttpUtil.JSON));
    }

    /**
     * 微信用户管理
     * 取消拉黑用户
     * @return
     */
    public JSONObject cancalBlackUser(String acceccToken, String json) throws Exception{
        isInited();
        return JSONObject.parseObject(HttpUtil.httpsPost(WeChatUrl.CANCEL_BLACK_USER_URL + acceccToken,json,HttpUtil.JSON));
    }
}
